建立陣列
使用「逗號」來建立陣列
#一個陣列(內含三個元素)
PS R:\> $arr = 5, 6, 7
PS R:\> $arr
5
6
7
#一個陣列(內含一個元素)
PS R:\> $arr = ,100
PS R:\> $arr
100
#元素可以是不同型別
PS R:\> $arr = 100, 200, "abc"
PS R:\> $arr
100
200
abc
#小括弧的功能,並不是用來建立陣列,而是用來調整優先順序
PS R:\> $arr = (100, 200, "abc")
PS R:\> $arr.Count
3
#一個陣列(內含一個元素,元素本身是陣列)
PS R:\> $arr = ,(100, 200, "abc")
PS R:\> $arr.Count
1
#不加小括弧
PS R:\> $arr = ,100, 200, "abc"
PS R:\> $arr.Count
3
命令的可能結果
#$files的可能型別:
# 找到0 個txt:null
# 找到1 個txt:FileInfo
# 找到多個txt:陣列
PS R:\> $files = dir *.txt
使用 @() 傳回陣列
#$files的可能結果:
# 一個空陣列(長度0)
# 一個陣列(內含一個元素)
# 一個陣列(內含多個元素)
#如果不是陣列,就把它變成陣列
#如果已經是陣列了,就不管它
PS R:\> $files = @(dir *.txt)
不使用 @() 的話
#以為Length屬性是「找到的個數」
#結果是「檔案大小」
#原來,它只找到一個檔案,傳回了FileInfo物件
PS R:\> $files = dir *.ps1
PS R:\> $files.Length
631
#這裡的Length屬性是陣列長度
PS R:\> $files = @(dir *.ps1)
PS R:\> $files.Length
1
使用 @() 來建立空陣列
PS R:\> $arr = @()
() vs @()
#沒有找到檔案時,會報錯
PS R:\> (dir *.zip)[0]
無法編制 Null 陣列的索引。
位於 線路:1 字元:1
#沒有找到檔案時,不會報錯
PS R:\> @(dir *.zip)[0]
PS R:\> $null -eq @(dir *.zip)[0]
True
使用 .. 來建立陣列
# 起點、終點都有包含
PS R:\> 100 .. 102
100
101
102
# 遞減
PS R:\> 3 .. 1
3
2
1
function的傳回值
傳回的是,陣列裡的元素。不傳回陣列
#不只return是傳回值,其他地方也是
PS R:\> function myFunc{
>> #這裡是傳回值
>> 100,200,300
>>
>> #這裡也是傳回值
>> return 700,800,900
>> }
#$r是一個陣列(內含6個元素)
PS R:\> $r = myFunc
PS R:\> $r.Count
6
PS R:\> function myFunc2{
>> $a1 = 100,200,300
>> $a2 = 700,800,900
>>
>>
>> #這裡是傳回值
>> $a1
>>
>> #這裡也是傳回值
>> return $a2
>> }
#$r是一個陣列(內含6個元素)
PS R:\> $r = myFunc2
PS R:\> $r.Count
6
在「陣列」前面加逗號,使它傳回陣列
PS R:\> function myFunc{
>> #前面加逗號
>> ,(100,200,300)
>>
>> #前面加逗號
>> return ,(700,800,900)
>> }
PS R:\> $r = myFunc
PS R:\> $r.Count
2
PS R:\> $r[0]
100
200
300
PS R:\> $r[1]
700
800
900
PS R:\> function myFunc2{
>> $a1 = 100,200,300
>> $a2 = 700,800,900
>>
>>
>> #前面加逗號
>> ,$a1
>>
>> #前面加逗號
>> return ,$a2
>> }
PS R:\> $r = myFunc2
PS R:\> $r.Count
2
PS R:\> $r[0]
100
200
300
PS R:\> $r[1]
700
800
900
陣列取值
負的索引值
PS R:\> $arr = 100, 200, 300
PS R:\> $arr[-1]
300
# 0 到 -1 並不是全部
PS R:\> $arr[0..-1]
100
300
PS R:\> 0..-1
0
-1
中括弧內可以放陣列
#只有取值可以這樣做。設值不行。
PS R:\> $arr = 100, 200, 300
PS R:\> $i = 2, 1, 0
PS R:\> $arr[$i]
300
200
100
陣列的屬性值
PS R:\> $files = @(dir *.txt)
#使用「陣列自己」的屬性值
PS R:\> $files.Length
3
#使用「元素」的屬性值
PS R:\> $files.LastWriteTime
2022年4月12日 下午 06:45:11
2022年5月29日 上午 08:00:13
2022年5月30日 下午 08:06:53
陣列設值
陣列向等號左邊設值
#變數個數相同
PS R:\> $arr = 100, 200, 300
PS R:\> $a, $b, $c = $arr
PS R:\> $a
100
PS R:\> $b
200
PS R:\> $c
300
#變數個數少
PS R:\> $a, $b = $arr
PS R:\> $a
100
PS R:\> $b
200
300
#變數個數多
PS R:\> $a, $b, $c, $d = $arr
PS R:\> $a
100
PS R:\> $b
200
PS R:\> $c
300
PS R:\> $d
PS R:\> $null -eq $d
True
陣列加法
陣列 + 陣列
PS R:\> $arr1 = 100, 200, 300
PS R:\> $arr2 = 400, 500, 600
#加入的是元素
PS R:\> $r = $arr1 + $arr2
PS R:\> $r.Count
6
#前面放逗號,加入陣列
PS R:\> $r = $arr1 + ,$arr2
PS R:\> $r.Count
4
陣列 + 元素
PS R:\> $arr1 = 100, 200, 300
#把 500 放到陣列後面
PS R:\> $r = $arr1 + 500
PS R:\> $r.Count
4
#把 500 放到陣列前面
PS R:\> $r = 500 + $arr1
方法引動過程失敗,因為 [System.Object[]] 未包含名為 'op_Addition' 的方法。
位於 線路:1 字元:1
#用 @() 轉成陣列,再相加
PS R:\> $r = @(500) + $arr1
PS R:\> $r.Count
4
陣列乘法
PS R:\> $arr1 = 100, 200, 300
# 倍數要放在右邊
PS R:\> $r = $arr1 * 3
PS R:\> $r.Count
9
# 倍數不能放在左邊
PS R:\> $r = 3 * $arr1
方法引動過程失敗,因為 [System.Object[]] 未包含名為 'op_Multiply' 的方法。
位於 線路:1 字元:1